home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-08-05 | 24.7 KB | 1,423 lines |
- /* GNUPLOT - pc.trm */
- /*
- * Copyright (C) 1990
- *
- * Permission to use, copy, and distribute this software and its
- * documentation for any purpose with or without fee is hereby granted,
- * provided that the above copyright notice appear in all copies and
- * that both that copyright notice and this permission notice appear
- * in supporting documentation.
- *
- * Permission to modify the software is granted, but not the right to
- * distribute the modified code. Modifications are to be distributed
- * as patches to released version.
- *
- * This software is provided "as is" without express or implied warranty.
- *
- * This file is included by ../term.c.
- *
- * This terminal driver supports:
- * Under Microsoft C
- * cga, egabios, egalib, vgabios, hercules, corona325, att
- * Under Turboc C
- * egalib, vgalib, vgamono, svga, mcga, cga, hercules, att
- *
- * AUTHORS
- * Colin Kelley, Thomas Williams, William Wilson, Russell Lang
- *
- * send your comments or suggestions to (pixar!info-gnuplot@sun.com).
- *
- */
-
- #ifdef __TURBOC__
- #include <graphics.h>
- #include <conio.h>
- #include <dos.h>
- int g_driver, g_mode, g_error;
- char far *path;
- char *pathp, path_s[128];
-
- /* instead of string.h */
- extern char *strrchr();
-
- get_path()
- {
- path=(char far *) getenv("BGI");
- if (path==NULL) {
- (void) strcpy(path_s,_argv[0]);
- pathp=strrchr(path_s,'\\');
- *pathp=0x00;
- path=path_s;
- }
- }
-
- static struct text_info tinfo; /* So we can restore starting text mode. */
- #endif
-
-
- static char near buf[80]; /* kludge since EGA.LIB is compiled SMALL */
-
- static int pattern[] = {0xffff, 0x0f0f, 0xffff, 0xaaaa, 0x3333, 0x3f3f, 0x0f0f};
-
- static int graphics_on = FALSE;
- int startx, starty;
-
- int pc_angle;
- #define PC_VCHAR FNT5X9_VCHAR
- #define PC_HCHAR FNT5X9_HCHAR
-
- pause() /* press any key to continue... */
- {
- (void) getch();
- }
-
-
- PC_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- #ifdef __TURBOC__
- restorecrtmode();
- textmode(tinfo.currmode);
- clrscr();
- #else
- Vmode(3);
- #endif
- }
-
- PC_reset()
- {
- #ifdef __TURBOC__
- closegraph();
- textmode(tinfo.currmode);
- clrscr();
- #endif
- }
-
-
- #ifndef __TURBOC__
-
- PC_putc(x,y,c,angle,line_func)
- unsigned int x,y;
- char c;
- int angle;
- FUNC_PTR line_func;
- {
- int i,j,k;
- unsigned int pixelon;
- i = (int)(c) - 32;
- for (j=0; j<FNT5X9_VBITS; j++) {
- for (k=0; k<FNT5X9_HBITS; k++) {
- pixelon = (((unsigned int)(fnt5x9[i][j])) >> k & 1);
- if (pixelon) {
- switch(angle) {
- case 0 : (*line_func)(x+k+1,y-j,x+k+1,y-j);
- break;
- case 1 : (*line_func)(x-j,y-k-1,x-j,y-k-1);
- break;
- }
- }
- }
- }
- }
-
-
- int PC_text_angle(ang)
- int ang;
- {
- pc_angle=ang;
- return TRUE;
- }
-
-
- #define CGA_XMAX 640
- #define CGA_YMAX 200
-
- #define CGA_XLAST (CGA_XMAX - 1)
- #define CGA_YLAST (CGA_YMAX - 1)
-
- #define CGA_VCHAR PC_VCHAR
- #define CGA_HCHAR PC_HCHAR
- #define CGA_VTIC 4
- #define CGA_HTIC 6
-
- int line_cga;
-
- CGA_init()
- {
- PC_color(1); /* monochrome */
- }
-
- CGA_graphics()
- {
- graphics_on = TRUE;
- Vmode(6);
- }
-
- #define CGA_text PC_text
-
- CGA_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- line_cga=linetype;
- PC_mask(pattern[linetype+2]);
- }
-
- CGA_move(x,y)
- {
- startx = x;
- starty = y;
- }
-
-
- CGA_vector(x,y)
- {
- PC_line(startx,CGA_YLAST-starty,x,CGA_YLAST-y);
- startx = x;
- starty = y;
- }
-
-
- CGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- int i;
- int line;
- line= line_cga; /* disable the dotted lines temporarily */
- PC_mask(pattern[0]);
- switch(pc_angle) {
- case 0 : y -= CGA_VCHAR/2;
- break;
- case 1 : x += CGA_VCHAR/2;
- break;
- }
- for (i=0;str[i];i++) {
- PC_putc(x,CGA_YLAST-y,str[i],pc_angle,PC_line);
- switch(pc_angle) {
- case 0 : x+=CGA_HCHAR ;
- break;
- case 1 : y+=CGA_HCHAR ;
- break;
- }
- }
- PC_mask(pattern[line]); /* enable dotted lines */
- }
-
-
- #define CGA_text_angle PC_text_angle
-
- #define CGA_reset PC_reset
-
-
- #define EGA_XMAX 640
- #define EGA_YMAX 350
-
- #define EGA_XLAST (EGA_XMAX - 1)
- #define EGA_YLAST (EGA_YMAX - 1)
-
- #define EGA_VCHAR PC_VCHAR
- #define EGA_HCHAR PC_HCHAR
- #define EGA_VTIC 4
- #define EGA_HTIC 5
-
- static int ega64color[] = {1,1,5,4,3,5,4,3, 5, 4, 3, 5, 4, 3,5};
- static int ega256color[] = {7,8,2,3,4,5,9,14,12,15,13,10,11,1,6};
-
- static int *egacolor;
-
-
- EGA_init()
- {
- PC_mask(0xffff);
- egacolor = ega256color; /* should be smarter */
- }
-
- EGA_graphics()
- {
- graphics_on = TRUE;
- Vmode(16);
- }
-
- #define EGA_text PC_text
-
- EGA_linetype(linetype)
- {
- if (linetype >= 13)
- linetype %= 13;
- PC_color(egacolor[linetype+2]);
- }
-
- EGA_move(x,y)
- {
- startx = x;
- starty = y;
- }
-
- EGA_vector(x,y)
- {
- PC_line(startx,EGA_YLAST-starty,x,EGA_YLAST-y);
- startx = x;
- starty = y;
- }
-
-
- EGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- int i;
- switch(pc_angle) {
- case 0 : y -= EGA_VCHAR/2;
- break;
- case 1 : x += EGA_VCHAR/2;
- break;
- }
- for (i=0;str[i];i++) {
- PC_putc(x,EGA_YLAST-y,str[i],pc_angle,PC_line);
- switch(pc_angle) {
- case 0 : x+=EGA_HCHAR ;
- break;
- case 1 : y+=EGA_HCHAR ;
- break;
- }
- }
- }
-
-
- #define EGA_text_angle PC_text_angle
-
- #define EGA_reset PC_reset
-
-
-
- /* The following VGA routines are hacked from the above EGA routines
- They worked on two VGA cards.
- Russell Lang, eln272v@monu1.cc.monash.oz */
- #define VGA_XMAX 640
- #define VGA_YMAX 480
-
- #define VGA_XLAST (VGA_XMAX - 1)
- #define VGA_YLAST (VGA_YMAX - 1)
-
- #define VGA_VCHAR PC_VCHAR
- #define VGA_HCHAR PC_HCHAR
- #define VGA_VTIC 5
- #define VGA_HTIC 5
-
- static int vga256color[] = {7,8,2,3,4,5,9,14,12,15,13,10,11,1,6};
-
- static int *vgacolor;
-
-
- VGA_init()
- {
- PC_mask(0xffff);
- vgacolor = vga256color; /* should be smarter */
- }
-
- VGA_graphics()
- {
- graphics_on = TRUE;
- Vmode(18);
- }
-
- #define VGA_text PC_text
-
- VGA_linetype(linetype)
- {
- if (linetype >= 13)
- linetype %= 13;
- PC_color(vgacolor[linetype+2]);
- }
-
- VGA_move(x,y)
- {
- startx = x;
- starty = y;
- }
-
- VGA_vector(x,y)
- {
- PC_line(startx,VGA_YLAST-starty,x,VGA_YLAST-y);
- startx = x;
- starty = y;
- }
-
-
- VGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- int i;
- switch(pc_angle) {
- case 0 : y -= VGA_VCHAR/2;
- break;
- case 1 : x += VGA_VCHAR/2;
- break;
- }
- for (i=0;str[i];i++) {
- PC_putc(x,VGA_YLAST-y,str[i],pc_angle,PC_line);
- switch(pc_angle) {
- case 0 : x+=VGA_HCHAR ;
- break;
- case 1 : y+=VGA_HCHAR ;
- break;
- }
- }
- }
-
-
- #define VGA_text_angle PC_text_angle
-
- #define VGA_reset PC_reset
-
-
-
- #ifdef EGALIB
-
- #define EGALIB_XMAX 640
- #define EGALIB_YMAX 350
-
- #define EGALIB_XLAST (EGA_XMAX - 1)
- #define EGALIB_YLAST (EGA_YMAX - 1)
-
- #define EGALIB_VCHAR 14
- #define EGALIB_HCHAR 8
- #define EGALIB_VTIC 4
- #define EGALIB_HTIC 5
-
- #include "mcega.h"
-
- EGALIB_init()
- {
- GPPARMS();
- if (GDTYPE != 5) {
- term = 0;
- int_error("color EGA board not found",NO_CARET);
- }
- egacolor = (GDMEMORY < 256) ? ega64color : ega256color;
- }
-
- EGALIB_graphics()
- {
- graphics_on = TRUE;
- GPINIT();
- }
-
- EGALIB_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- GPTERM();
- }
-
- EGALIB_linetype(linetype)
- {
- if (linetype >= 13)
- linetype %= 13;
- GPCOLOR(egacolor[linetype+2]);
- }
-
- EGALIB_move(x,y)
- {
- GPMOVE(x,GDMAXROW-y);
- }
-
-
- EGALIB_vector(x,y)
- {
- GPLINE(x,GDMAXROW-y);
- }
-
-
- EGALIB_put_text(x,y,str)
- int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- GotoXY((int)(x/EGALIB_HCHAR),
- (int)((EGALIB_YMAX-y-(EGALIB_VCHAR/2))/EGALIB_VCHAR));
- gprintf(buf);
- }
-
-
- #define EGALIB_reset PC_reset
-
- #endif /* EGALIB */
-
-
- #ifdef HERCULES
-
- #define HERC_XMAX 720
- #define HERC_YMAX 348
-
- #define HERC_XLAST (HERC_XMAX - 1)
- #define HERC_YLAST (HERC_YMAX - 1)
-
- #define HERC_VCHAR PC_VCHAR
- #define HERC_HCHAR PC_HCHAR
- #define HERC_VTIC 4
- #define HERC_HTIC 5
-
- int line_herc;
-
- HERC_init()
- {
- H_init();
- }
-
- HERC_graphics()
- {
- HVmode(1);
- graphics_on = TRUE;
- }
-
- HERC_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- HVmode(0);
- }
-
- HERC_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- H_mask(pattern[linetype+2]);
- line_herc = linetype;
- }
-
- HERC_move(x,y)
- {
- if (x < 0)
- startx = 0;
- else if (x > HERC_XLAST)
- startx = HERC_XLAST;
- else
- startx = x;
-
- if (y < 0)
- starty = 0;
- else if (y > HERC_YLAST)
- starty = HERC_YLAST;
- else
- starty = y;
- }
-
- HERC_vector(x,y)
- {
- if (x < 0)
- x = 0;
- else if (x > HERC_XLAST)
- x = HERC_XLAST;
- if (y < 0)
- y = 0;
- else if (y > HERC_YLAST)
- y = HERC_YLAST;
-
- H_line(startx,HERC_YLAST-starty,x,HERC_YLAST-y);
- startx = x;
- starty = y;
- }
-
-
- HERC_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- int i;
- int line;
- line= line_herc; /* disable the dotted lines temporarily */
- H_mask(pattern[0]);
- switch(pc_angle) {
- case 0 : y -= HERC_VCHAR/2;
- break;
- case 1 : x += HERC_VCHAR/2;
- break;
- }
- for (i=0;str[i];i++) {
- PC_putc(x,HERC_YLAST-y,str[i],pc_angle,H_line);
- switch(pc_angle) {
- case 0 : x+=HERC_HCHAR ;
- break;
- case 1 : y+=HERC_HCHAR ;
- break;
- }
- }
- H_mask(pattern[line]); /* enable dotted lines */
- }
-
-
- #define HERC_text_angle PC_text_angle
-
- #define HERC_reset PC_reset
-
-
- #endif /* HERCULES */
-
-
- /* thanks to sask!macphed (Geoff Coleman and Ian Macphedran) for the
- ATT 6300 driver */
-
-
- #ifdef ATT6300
-
- #define ATT_XMAX 640
- #define ATT_YMAX 400
-
- #define ATT_XLAST (ATT_XMAX - 1)
- #define ATT_YLAST (ATT_YMAX - 1)
-
- #define ATT_VCHAR PC_VCHAR
- #define ATT_HCHAR PC_HCHAR
- #define ATT_VTIC 4
- #define ATT_HTIC 5
-
- #define ATT_init CGA_init
-
- ATT_graphics()
- {
- graphics_on = TRUE;
- Vmode(0x40); /* 40H is the magic number for the AT&T driver */
- }
-
- #define ATT_text CGA_text
-
- #define ATT_linetype CGA_linetype
-
- #define ATT_move CGA_move
-
- ATT_vector(x,y)
- {
- PC_line(startx,ATT_YLAST-starty,x,ATT_YLAST-y);
- startx = x;
- starty = y;
- }
-
-
- ATT_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- int i;
- int line;
- line= line_cga; /* disable the dotted lines temporarily */
- PC_mask(pattern[0]);
- switch(pc_angle) {
- case 0 : y -= ATT_VCHAR/2;
- break;
- case 1 : x += ATT_VCHAR/2;
- break;
- }
- for (i=0;str[i];i++) {
- PC_putc(x,ATT_YLAST-y,str[i],pc_angle,PC_line);
- switch(pc_angle) {
- case 0 : x+=ATT_HCHAR ;
- break;
- case 1 : y+=ATT_HCHAR ;
- break;
- }
- }
- PC_mask(pattern[line]); /* enable dotted lines */
- }
-
-
- #define ATT_text_angle PC_text_angle
-
- #define ATT_reset CGA_reset
-
- #endif /* ATT6300 */
-
-
- #ifdef CORONA
-
- #define COR_XMAX 640
- #define COR_YMAX 325
-
- #define COR_XLAST (COR_XMAX - 1)
- #define COR_YLAST (COR_YMAX - 1)
-
- #define COR_VCHAR PC_VCHAR
- #define COR_HCHAR PC_HCHAR
- #define COR_VTIC 4
- #define COR_HTIC 5
-
- int line_cor;
-
- static int corscreen; /* screen number, 0 - 7 */
-
- COR_init()
- {
- register char *p;
- if (!(p = getenv("CORSCREEN")))
- int_error("must run CORPLOT for Corona graphics",NO_CARET);
- corscreen = *p - '0';
- }
-
- COR_graphics()
- {
- graphics_on = TRUE;
- Vmode(3); /* clear text screen */
- grinit(corscreen);
- grandtx();
- }
-
- COR_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- grreset();
- txonly();
- Vmode(3);
- }
-
- COR_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- line_cor = linetype;
- Cor_mask(pattern[linetype+2]);
- }
-
- COR_move(x,y)
- {
- if (x < 0)
- startx = 0;
- else if (x > COR_XLAST)
- startx = COR_XLAST;
- else
- startx = x;
-
- if (y < 0)
- starty = 0;
- else if (y > COR_YLAST)
- starty = COR_YLAST;
- else
- starty = y;
- }
-
- COR_vector(x,y)
- {
- if (x < 0)
- x = 0;
- else if (x > COR_XLAST)
- x = COR_XLAST;
- if (y < 0)
- y = 0;
- else if (y > COR_YLAST)
- y = COR_YLAST;
-
- Cor_line(startx,COR_YLAST-starty,x,COR_YLAST-y);
- startx = x;
- starty = y;
- }
-
-
- COR_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- int i;
- int line;
- line= line_cor; /* disable the dotted lines temporarily */
- Cor_mask(pattern[0]);
- switch(pc_angle) {
- case 0 : y -= COR_VCHAR/2;
- break;
- case 1 : x += COR_VCHAR/2;
- break;
- }
- for (i=0;str[i];i++) {
- PC_putc(x,COR_YLAST-y,str[i],pc_angle,Cor_line);
- switch(pc_angle) {
- case 0 : x+=COR_HCHAR ;
- break;
- case 1 : y+=COR_HCHAR ;
- break;
- }
- }
- COR_mask(pattern[line]); /* enable dotted lines */
- }
-
-
- #define COR_text_angle PC_text_angle
-
- #define COR_reset PC_reset
-
- #endif /* CORONA */
-
-
- #else /* ifndef __TURBOC__ */
- /* all of the Turbo C routines for the different graphics devices go here */
-
- #define VGA_XMAX 640
- #define VGA_YMAX 480
-
- #define VGA_XLAST (VGA_XMAX - 1)
- #define VGA_YLAST (VGA_YMAX - 1)
-
- #define VGA_VCHAR 10
- #define VGA_HCHAR 8
- #define VGA_VTIC 4
- #define VGA_HTIC 5
-
- #define SVGA_XMAX 640
- #define SVGA_YMAX 480
-
- #define SVGA_VCHAR 10
- #define SVGA_HCHAR 8
- #define SVGA_VTIC 4
- #define SVGA_HTIC 5
-
- static int vga256color[] = {7,8,2,3,4,5,9,14,12,15,13,10,11,1,6};
- static int *vgacolor;
-
- static int svga_xmax = SVGA_XMAX,
- svga_ymax = SVGA_YMAX,
- svga_xlast = 639,
- svga_ylast = 479;
-
- #define VGA_reset EGALIB_reset
- #define VGA_text EGALIB_text
- #define VGA_move EGALIB_move
- #define VGA_vector EGALIB_vector
- #define VGA_text_angle PC_text_angle
- #define VGA_justify_text PC_justify_text
-
- #define SVGA_reset EGALIB_reset
- #define SVGA_text EGALIB_text
- #define SVGA_move EGALIB_move
- #define SVGA_vector EGALIB_vector
- #define SVGA_text_angle PC_text_angle
- #define SVGA_justify_text PC_justify_text
- #define SVGA_linetype VGA_linetype
-
- int PC_text_angle(ang)
- int ang;
- {
- int size = svga_ymax > 600 ? 2 : 1;
-
- pc_angle = ang;
-
- switch (ang) {
- case 0 : settextstyle(DEFAULT_FONT,HORIZ_DIR,size);
- break;
- case 1 : settextstyle(DEFAULT_FONT,VERT_DIR,size);
- break;
- }
- return TRUE;
- }
-
- int PC_justify_text(mode)
- enum JUSTIFY mode;
- {
- switch(mode) {
- case LEFT :
- settextjustify(LEFT_TEXT,CENTER_TEXT);
- break;
- case CENTRE :
- settextjustify(CENTER_TEXT,CENTER_TEXT);
- break;
- case RIGHT:
- settextjustify(RIGHT_TEXT,CENTER_TEXT);
- break;
- }
- return TRUE;
- }
-
- VGA_init()
- {
- g_driver=VGA;
- g_mode=2;
- gettextinfo(&tinfo);
- initgraph(&g_driver,&g_mode,path);
- if(g_driver!=9){
- term=0;
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
-
- /* int_error("color VGA board not found",NO_CARET);*/
- }
- if(g_driver==VGA) vgacolor=vga256color;
- }
-
- VGA_graphics()
- { g_driver=VGA;
- g_mode=2;
- graphics_on = TRUE;
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- VGA_justify_text(LEFT);
- }
-
- VGA_linetype(linetype)
- {
- if (linetype >= 13)
- linetype %= 13;
- setcolor(vgacolor[linetype+2]);
- }
-
- VGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,VGA_YLAST-y,buf);
- }
-
-
- VGAMONO_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- setlinestyle(4,pattern[linetype+2],1);
- }
-
- static int huge detect_svga(void)
- {
- return g_mode;
- }
-
- SVGA_init()
- {
- char *p, name[128], *SVGA = getenv( "SVGA" );
-
- if (SVGA == NULL)
- int_error("'SVGA' driver environment variable is not set",
- NO_CARET);
-
- strcpy(name, SVGA);
- if ((p = strrchr(name, '.')) == NULL ||
- sscanf(&p[1], "%d", &g_mode) != 1)
- int_error("'SVGA' envvar should be of the form 'name.mode'",
- NO_CARET);
-
- *p = 0;
-
- installuserdriver(name, detect_svga);
- gettextinfo(&tinfo);
- g_driver = 0;
- initgraph(&g_driver,&g_mode,path);
- if(g_driver<0){
- term=0;
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
-
- }
- else
- vgacolor=vga256color;
-
- /* Get the screen size: */
- svga_xmax = term_tbl[term].xmax = getmaxx() + 1;
- svga_ymax = term_tbl[term].ymax = getmaxy() + 1;
- svga_xlast = svga_xmax-1;
- svga_ylast = svga_ymax-1;
-
- if (svga_ymax > 600) { /* Double the tic/font sizes. */
- term_tbl[term].h_char = SVGA_HCHAR * 2;
- term_tbl[term].v_char = SVGA_VCHAR * 2;
- term_tbl[term].h_tic = SVGA_HTIC * 2;
- term_tbl[term].v_tic = SVGA_VTIC * 2;
- settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
- }
- else
- settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
- }
-
- SVGA_graphics()
- {
- graphics_on = TRUE;
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- VGA_justify_text(LEFT);
-
- svga_ymax = getmaxy() + 1;
- if (svga_ymax > 600) /* Double the tic/font sizes. */
- settextstyle(DEFAULT_FONT,HORIZ_DIR,2);
- else
- settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
- }
-
- SVGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,svga_ylast-y,buf);
- }
-
- #define MCGA_XMAX 640
- #define MCGA_YMAX 480
-
- #define MCGA_XLAST (MCGA_XMAX - 1)
- #define MCGA_YLAST (MCGA_YMAX - 1)
-
- #define MCGA_VCHAR 10
- #define MCGA_HCHAR 8
- #define MCGA_VTIC 4
- #define MCGA_HTIC 5
-
- static int *MCGAcolor;
-
- #define MCGA_reset EGALIB_reset
- #define MCGA_text EGALIB_text
- #define MCGA_move EGALIB_move
- #define MCGA_vector EGALIB_vector
- #define MCGA_text_angle PC_text_angle
- #define MCGA_justify_text PC_justify_text
-
- MCGA_init()
- {
- g_driver=MCGA;
- g_mode=5;
- gettextinfo(&tinfo);
- initgraph(&g_driver,&g_mode,path);
- if(g_driver!=2){
- term=0;
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
- }
- }
-
- MCGA_graphics()
- {
- graphics_on = TRUE;
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- MCGA_justify_text(LEFT);
- }
-
-
- MCGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,MCGA_YLAST-y,buf);
- }
-
-
- MCGA_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- setlinestyle(4,pattern[linetype+2],1);
- }
-
-
- #define EGALIB_XMAX 640
- #define EGALIB_YMAX 350
-
- #define EGALIB_XLAST (EGALIB_XMAX - 1)
- #define EGALIB_YLAST (EGALIB_YMAX - 1)
-
- #define EGALIB_VCHAR 10
- #define EGALIB_HCHAR 8
- #define EGALIB_VTIC 4
- #define EGALIB_HTIC 5
-
- static int ega64color[] = {1,1,5,4,3,5,4,3, 5, 4, 3, 5, 4, 3,5};
- static int ega256color[] = {7,8,2,3,4,5,9,14,12,15,13,10,11,1,6};
-
- static int *egacolor;
-
- #define EGALIB_text_angle PC_text_angle
- #define EGALIB_justify_text PC_justify_text
-
- EGALIB_init()
- {
- g_driver=EGA;
- g_mode=1;
- gettextinfo(&tinfo);
- initgraph(&g_driver,&g_mode,path);
- if(g_driver<3 || g_driver>4){
- term=0;
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
-
- /* int_error("color EGA board not found",NO_CARET);*/
- }
- if(g_driver==EGA) egacolor=ega256color;
- if(g_driver==EGA64) egacolor=ega64color;
- }
-
- EGALIB_graphics()
- {
- graphics_on = TRUE;
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- EGALIB_justify_text(LEFT);
- }
-
- EGALIB_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- restorecrtmode();
- textmode(tinfo.currmode);
- clrscr();
- svga_ymax = SVGA_YMAX; /* Since it may double font size if too high. */
- }
-
- EGALIB_linetype(linetype)
- {
- if (linetype >= 13)
- linetype %= 13;
- setcolor(egacolor[linetype+2]);
- }
-
- EGALIB_move(x,y)
- {
- moveto(x,getmaxy()-y);
- }
-
-
- EGALIB_vector(x,y)
- {
- lineto(x,getmaxy()-y);
- }
-
-
- EGALIB_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,EGALIB_YLAST-y,buf);
- }
-
-
- EGALIB_reset()
- {
- closegraph();
- textmode(tinfo.currmode);
- clrscr();
- svga_ymax = SVGA_YMAX; /* Since it may double font size if too high. */
- }
-
-
- #define CGA_XMAX 640
- #define CGA_YMAX 200
-
- #define CGA_XLAST (CGA_XMAX - 1)
- #define CGA_YLAST (CGA_YMAX - 1)
-
- #define CGA_VCHAR 10
- #define CGA_HCHAR 8
- #define CGA_VTIC 4
- #define CGA_HTIC 6
-
- #define CGA_text_angle PC_text_angle
- #define CGA_justify_text PC_justify_text
- #define CGA_reset PC_reset
-
- CGA_init()
- {
- g_driver=CGA;
- g_mode=4;
- gettextinfo(&tinfo);
- initgraph(&g_driver,&g_mode,path);
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
- /* PC_color(1); monochrome */
-
- }
-
- CGA_graphics()
- {
- graphics_on = TRUE;
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- CGA_justify_text(LEFT);
- /* Vmode(6);*/
- }
-
- #define CGA_text PC_text
-
- CGA_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- setlinestyle(4,pattern[linetype+2],1);
- }
-
- CGA_move(x,y)
- {
- moveto(x,getmaxy()-y);
- }
-
-
- CGA_vector(x,y)
- {
- lineto(x,getmaxy()-y);
- }
-
- CGA_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,CGA_YLAST-y,buf);
- }
-
-
-
- #define HERC_XMAX 720
- #define HERC_YMAX 348
-
- #define HERC_XLAST (HERC_XMAX - 1)
- #define HERC_YLAST (HERC_YMAX - 1)
-
- #define HERC_VCHAR 10
- #define HERC_HCHAR 8
- #define HERC_VTIC 4
- #define HERC_HTIC 5
-
- #define HERC_text_angle PC_text_angle
- #define HERC_justify_text PC_justify_text
- #define HERC_reset PC_reset
-
- HERC_init()
- {
- g_driver=HERCMONO;
- g_mode=0;
- gettextinfo(&tinfo);
- initgraph(&g_driver,&g_mode,path);
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
- }
-
- HERC_graphics()
- {
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- HERC_justify_text(LEFT);
- graphics_on = TRUE;
- }
-
- HERC_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- restorecrtmode();
- textmode(tinfo.currmode);
- clrscr();
- }
-
- HERC_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- setlinestyle(4,pattern[linetype+2],1);
- }
-
- HERC_move(x,y)
- {
- if (x < 0)
- x = 0;
- else if (x > HERC_XLAST)
- x = HERC_XLAST;
-
- if (y < 0)
- y = 0;
- else if (y > HERC_YLAST)
- y = HERC_YLAST;
- moveto(x,getmaxy()-y);
- }
-
- HERC_vector(x,y)
- {
- if (x < 0)
- x = 0;
- else if (x > HERC_XLAST)
- x = HERC_XLAST;
- if (y < 0)
- y = 0;
- else if (y > HERC_YLAST)
- y = HERC_YLAST;
-
- lineto(x,getmaxy()-y);
- }
-
-
- HERC_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,HERC_YLAST-y,buf);
- }
-
-
- #ifdef ATT6300
- /* this driver added by rjl@monu1.cc.monash.edu.au */
-
- #define ATT_XMAX 640
- #define ATT_YMAX 400
-
- #define ATT_XLAST (ATT_XMAX - 1)
- #define ATT_YLAST (ATT_YMAX - 1)
-
- #define ATT_VCHAR PC_VCHAR
- #define ATT_HCHAR PC_HCHAR
- #define ATT_VTIC 4
- #define ATT_HTIC 5
-
- #define ATT_text_angle PC_text_angle
- #define ATT_justify_text PC_justify_text
- #define ATT_reset PC_reset
-
- ATT_init()
- {
- g_driver=ATT400;
- g_mode=5;
- gettextinfo(&tinfo);
- initgraph(&g_driver,&g_mode,path);
- switch (g_driver){
- case -2: fprintf(stderr,"Graphics card not detected.\n");
- break;
- case -3: fprintf(stderr,"BGI driver file cannot be found.\n");
- break;
- case -4: fprintf(stderr,"Invalid BGI driver file.\n");
- break;
- case -5: fprintf(stderr,"Insufficient memory to load ",
- "graphics driver.");
- break;
- }
- }
-
- ATT_graphics()
- {
- gettextinfo(&tinfo);
- setgraphmode(getgraphmode());
- ATT_justify_text(LEFT);
- graphics_on = TRUE;
- }
-
- ATT_text()
- {
- if (graphics_on) {
- graphics_on = FALSE;
- pause();
- }
- restorecrtmode();
- textmode(tinfo.currmode);
- clrscr();
- }
-
- ATT_linetype(linetype)
- {
- if (linetype >= 5)
- linetype %= 5;
- setlinestyle(4,pattern[linetype+2],1);
- }
-
- ATT_move(x,y)
- {
- if (x < 0)
- x = 0;
- else if (x > ATT_XLAST)
- x = ATT_XLAST;
-
- if (y < 0)
- y = 0;
- else if (y > ATT_YLAST)
- y = ATT_YLAST;
- moveto(x,getmaxy()-y);
- }
-
- ATT_vector(x,y)
- {
- if (x < 0)
- x = 0;
- else if (x > ATT_XLAST)
- x = ATT_XLAST;
- if (y < 0)
- y = 0;
- else if (y > ATT_YLAST)
- y = ATT_YLAST;
-
- lineto(x,getmaxy()-y);
- }
-
-
- ATT_put_text(x,y,str)
- unsigned int x, y;
- char *str;
- {
- strcpy((char far *)buf,str);
- outtextxy(x,ATT_YLAST-y,buf);
- }
- #endif /* ifdef ATT6300 */
-
- #endif /* ifndef __TURBOC__ */
-
-